草庐IT

c++ - QMap 和 std::unique_ptr

全部标签

c++ - 如何在 Pi 上使用 OpenGL ES 在绘制到屏幕之前旋转纹理

最近才知道树莓派的GPU只支持OpenGLES。我有一个任务要完成,问题是,每当我搜索OpenGLES时,我都会得到基于Android和IOS的结果。谢天谢地,我只有一个小问题。我偶然发现了simple2d库,它抽象了OpenGLES与pi上的视频核心IVGPU的接口(interface)。它是一个开源库,似乎不支持旋转纹理。这是我想要清除所有障碍的唯一功能。这是对DrawTextures的调用。我将非常感谢任何帮助我解决这个问题的人。staticvoidS2D_GLES_DrawTexture(intx,inty,intw,inth,GLfloatr,GLfloatg,GLfloat

c++ - std::thread::join 何时会因 no_such_process 而失败

std::thread::join()允许失败,如果线程“无效”,则为no_such_process抛出std::system_error。请注意,no_such_process情况不同于不可连接的线程(错误代码为invalid_argument)。在什么情况下会发生这种情况?或者,我必须怎么做才能确保join()不会因此而失败?我想要一个析构函数join()它管理的一些线程,当然我希望析构函数永远不会抛出异常。什么可以使(正确构造且未被破坏的)线程“无效”。 最佳答案 Inwhatcircumstancesmightthathap

c++ - 访问并调用 std::function 的变体

我正在使用std::variant存储std::function的不同签名秒。所述函数存储在vector中,后者从map中检索。如何调用vector中的每个函数std::variant?我觉得我应该使用std::visit但我不知道正确的用法。#include#include#include#include#includeusingvar_t=std::variant,std::function>;enumclassEventEnum{A,B,C};structController{templatevoidsubscribe(var_tfn){auto&callbacksVec=cal

c++ - 在 C++11 线程中,std::mutex 对内存可见性有什么保证?

我目前正在尝试学习C++11线程API,但我发现各种资源都没有提供重要的信息:CPU缓存的处理方式。现代CPU的每个核心都有一个缓存(意味着不同的线程可能使用不同的缓存)。这意味着一个线程有可能将一个值写入内存,而另一个线程可能看不到它,即使它看到第一个线程也进行了其他更改。当然,任何好的线程API都提供了一些方法来解决这个问题。然而,在C++的线程api中,它是如何工作的并不清楚。我知道std::mutex,例如,以某种方式保护内存,但不清楚它的作用:它是否清除整个CPU缓存,是否清除从当前线程的缓存中清除互斥体内部访问的对象,或者其他什么?此外,显然,只读访问不需要互斥量,但是如果

c++ - 模板类型推导失败(std::empty 作为谓词)

我有一个vector的vector,我想检查它们是否都是空的。使用标准库,我试过:#include#includeintmain(){std::vector>vv;std::all_of(std::begin(vv),std::end(vv),std::empty);}这会导致clang7.0出现以下错误:/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h:508:5:note:candidatetemplateignored:couldn'tinfertemp

c++/c 访问具有不同名称和大小的多个字符数组

我正在分析一个pcap文件,并在Wireshark中将剖析导出为c数组,我需要从相关字节中提取一些数据。但是我不知道如何访问所有这些数组。它们看起来像这样:/*Frame(73bytes)*/staticconstunsignedcharpkt1324[73]={0x80,0xe6,0x50,0x06,0xe7,0xae,0x48,0xfd,/*..P...H.*/0x8e,0xdf,0x2f,0x06,0x86,0xdd,0x60,0x00,/*../...`.*/0x00,0x00,0x00,0x13,0x11,0x30,0x20,0x01,/*.....0.*/0x06,0x60

c++ - 通过 unique_ptr 和自定义删除器使用自动扣除

我目前正在使用一个C库,该库定义了许多数据类型,所有这些类型都需要由用户管理它们的生命周期。有许多函数以这种方式定义:int*create(){returnnewint();}voiddestroy(int*i){deletei;}其中大部分在创建后不需要访问。他们只需要存在。因此,我尝试使用在我需要它们存在的范围内声明的unique_ptr来管理它们。这样的声明是这样的://NotethatI'mavoidingwritingthetype'snamemanually.autoa=std::unique_ptr,decltype(&destroy)>{create(),&destro

c++ - 为什么这个悬空的 std::weak_ptr 不会导致 SEGFAULT?

这个问题在这里已经有了答案:Whendoesinvokingamemberfunctiononanullinstanceresultinundefinedbehavior?(2个答案)关闭4年前。在下面的代码中,我在范围内创建了一个shared_ptr并将其分配给一个weak_ptr。为什么在运行代码时我没有得到SEGFAULT,因为wp应该在范围之外无效,对吧?namespace{structDummy{intx;voidfoo(){std::coutwp;{autosp=std::make_shared();wp=sp;}wp.lock()->foo();};

c++ - 指向 std::invoke 中成员函数对象的指针

为什么std::invoke不能使用指向成员的指针,而成员是带参数的函数对象?像这样:structMyClass{std::functionfunctor{[](intarg){printf("%d\n",arg);}};};intmain(){MyClassmc;std::invoke(&MyClass::functor,mc,110);}打印:'std::invoke':nomatchingoverloadedfunctionfound.我在VisualC++和g++中检查了这一点。此外,std::is_invocable_v声称此仿函数不可调用,这绝对是错误的。我是否遗漏了什么或

c++ - 确保 std::bind 提供正确数量的参数

更改std::function的签名后,我想知道编译器没有提示我还没有更改的函数签名。基本上,我的代码如下所示:#include#include#includeclassCallbackCaller{public:typedefstd::functionCallbackFunction;voidregisterCallbackFunction(CallbackFunctioncb_function){callback_functions_.push_back(cb_function);}voidcallThemAll(){for(CallbackFunction&cb_function